package com.cc.moxingvoice.utils;

import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.FileHeader;

import java.util.List;
import java.util.Scanner;

/**
 * 创建日期：2018/3/11 on 19:32
 * 描述：使用Zip4j解压
 * 作者：郭士超
 * QQ：1169380200
 */

public class ZipUtil {

    // 解压方法1
    public static void Unzip4j(String zipFilePath, String toPath, String password) throws ZipException {
        long startTime = System.currentTimeMillis();
        ZipFile zip = new ZipFile(zipFilePath);
        //第一时间设置编码格式
//        zip.setFileNameCharset("GBK");
        //用自带的方法检测一下zip文件是否合法，包括文件是否存在、是否为zip文件、是否被损坏等
        if (!zip.isValidZipFile()) {
            throw new ZipException("文件不合法或不存在");
        }
        checkEncrypted(zip, password);
        // 跟java自带相比，这里文件路径会自动生成，不用判断
        zip.extractAll(toPath);
        long endTime = System.currentTimeMillis();
    }

    // 解压方法2
    public static void Unzip4jC(String zipFilePath, String toPath, String password) throws ZipException {
        long startTime = System.currentTimeMillis();
        ZipFile zipFile = new ZipFile(zipFilePath);
        //设置编码格式
//        zipFile.setFileNameCharset("GBK");   // 关于中文好像
        if (!zipFile.isValidZipFile()) {
            throw new ZipException("文件不合法或不存在");
        }
        //检查是否需要密码
        checkEncrypted(zipFile, password);
        List<FileHeader> fileHeaderList = zipFile.getFileHeaders();
        for (int i = 0; i < fileHeaderList.size(); i++) {
            FileHeader fileHeader = fileHeaderList.get(i);
            zipFile.extractFile(fileHeader, toPath);
        }
        long endTime = System.currentTimeMillis();
    }

    //检测密码
    private static void checkEncrypted(ZipFile zip, String password) throws ZipException {
        if (zip.isEncrypted()) {
            zip.setPassword(password.trim());
        }
    }



}
